home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Samples / C++ / DirectInput / DIConfig / main.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-27  |  2.6 KB  |  123 lines

  1. //-----------------------------------------------------------------------------
  2. // File: main.cpp
  3. //
  4. // Desc: Contains global data and DllMain.
  5. //
  6. // Copyright (C) Microsoft Corporation. All Rights Reserved.
  7. //-----------------------------------------------------------------------------
  8.  
  9. #include "common.hpp"
  10.  
  11.  
  12. HMODULE g_hModule = NULL;
  13. long g_cComponents = 0;
  14. long g_cServerLocks = 0;
  15.  
  16. //exported fns
  17.  
  18. //can unload?
  19. STDAPI DllCanUnloadNow()
  20. {
  21.     if ((g_cComponents == 0) && (g_cServerLocks == 0))
  22.     {
  23.         return S_OK;
  24.     }
  25.     else
  26.     {
  27.         return S_FALSE;
  28.     }
  29. }
  30.  
  31.  
  32. //get class factory
  33. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  34. {
  35.     //check which class it is
  36.     if ( (rclsid != CLSID_CDirectInputActionFramework) &&
  37.          (rclsid != CLSID_CDIDeviceActionConfigPage) )
  38.     {
  39.         return CLASS_E_CLASSNOTAVAILABLE;
  40.     }
  41.  
  42.     //create the appropriate class factory
  43.     IClassFactory* pFact = NULL;
  44.  
  45.     if (rclsid == CLSID_CDirectInputActionFramework) {
  46.         pFact = new CFactory();
  47.     } else if (rclsid == CLSID_CDIDeviceActionConfigPage) {
  48.         pFact = new CPageFactory();
  49.     }
  50.  
  51.     if (pFact == NULL) {
  52.         return E_OUTOFMEMORY;
  53.     } else {
  54.         HRESULT hr;
  55.         
  56.         hr = pFact->QueryInterface(riid, ppv);
  57.         pFact->Release();
  58.  
  59.         return hr;
  60.     }
  61. }
  62.  
  63.  
  64. //dll module information
  65. BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
  66. {
  67.     switch(dwReason)
  68.     {
  69.         case DLL_PROCESS_ATTACH:
  70.             g_hModule = (HMODULE)hModule;
  71.             CFlexWnd::RegisterWndClass((HINSTANCE)hModule);
  72.  
  73.             break;
  74.  
  75.         case DLL_PROCESS_DETACH:
  76.             CFlexWnd::UnregisterWndClass((HINSTANCE)hModule);
  77.             break;
  78.     }
  79.  
  80.     return TRUE;
  81. }
  82.  
  83.  
  84. //server registration
  85. STDAPI DllRegisterServer()
  86. {
  87.     HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK;
  88.  
  89.     hr1 = RegisterServer(g_hModule, CLSID_CDirectInputActionFramework, _T("CLSID_CDirectInputActionFramework"), _T("DIACTFRM"), _T("DIACTFRM.1"));
  90.     hr2 = RegisterServer(g_hModule, CLSID_CDIDeviceActionConfigPage, _T("CLSID_CDIDeviceActionConfigPage"), _T("DIACTFRM"), _T("DIACTFRM.1"));
  91.  
  92.     if (FAILED(hr1))
  93.         return hr1;
  94.  
  95.     if (FAILED(hr2))
  96.         return hr2;
  97.  
  98.     if (FAILED(hr3))
  99.         return hr3;
  100.  
  101.     return S_OK;
  102. }
  103.  
  104. //server unregistration
  105. STDAPI DllUnregisterServer()
  106. {
  107.     HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK;
  108.  
  109.     hr1 = UnregisterServer(CLSID_CDirectInputActionFramework, _T("DIACTFRM"), _T("DIACTFRM.1"));
  110.     hr2 = UnregisterServer(CLSID_CDIDeviceActionConfigPage, _T("DIACTFRM"), _T("DIACTFRM.1"));
  111.  
  112.     if (FAILED(hr1))
  113.         return hr1;
  114.  
  115.     if (FAILED(hr2))
  116.         return hr2;
  117.  
  118.     if (FAILED(hr3))
  119.         return hr3;
  120.  
  121.     return S_OK;
  122. }
  123.